// https://leetcode.cn/problems/arithmetic-slices/

// 题干：如果一个数列 至少有三个元素 ，并且任意两个相邻元素之差相同，则称该数列为等差数列。
//      例如，[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
//      给你一个整数数组 nums ，返回数组 nums 中所有为等差数组的 子数组 个数。
//      子数组 是数组中的一个连续序列。

// 示例：输入：nums = [1,2,3,4]
//      输出：3

// 碎语：

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int numberOfArithmeticSlices(vector<int>& nums)
    {
        // 1.状态表示
        // 2.状态转移方程
        // 3.初始化
        // 4.确定填表顺序
        // 5.返回值

        // dp[i]表示以 i 位置元素为结尾的所有子数组中有多少个等差数列
        int n = nums.size(); if (n <= 2) return 0;
        vector<int> dp(n);

        int ret = 0;
        for (int i = 2 ; i < n ; i++) {
            dp[i] = (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) ? dp[i - 1] + 1 : 0;
            ret += dp[i];
        }

        return ret;
    }
};

int main()
{
    Solution sol;
    vector<int> nums = {1,2,3,4};

    cout << sol.numberOfArithmeticSlices(nums) << endl;

    return 0;
}